<!DOCTYPE html>
<html lang="en">
<head>
  <title>Vert.x Mail client (SMTP client implementation) - Vert.x</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta content="width=device-width, initial-scale=1.0" name="viewport">
  <meta content="Vert.x is a tool-kit for building reactive applications on the JVM." name="description">
  <link href="http://vertx.io/stylesheets/docs.css" media="screen" rel="stylesheet">
  <link href="http://vertx.io/stylesheets/font-awesome.min.css" media="screen" rel="stylesheet">
  <link href="http://vertx.io/javascripts/styles/rainbow.min.css" media="screen" rel="stylesheet">
  <!-- IE 6-8 support of HTML 5 elements -->
  <!--[if lt IE 9]>
  <script src="http://static.jboss.org/theme/js/libs/html5/pre3.6/html5.min.js"></script>
  <![endif]-->

  <link rel="apple-touch-icon" sizes="57x57" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-57x57.png">
  <link rel="apple-touch-icon" sizes="60x60" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-60x60.png">
  <link rel="apple-touch-icon" sizes="72x72" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-72x72.png">
  <link rel="apple-touch-icon" sizes="76x76" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-76x76.png">
  <link rel="apple-touch-icon" sizes="114x114" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-114x114.png">
  <link rel="apple-touch-icon" sizes="120x120" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-120x120.png">
  <link rel="apple-touch-icon" sizes="144x144" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-144x144.png">
  <link rel="apple-touch-icon" sizes="152x152" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-152x152.png">
  <link rel="apple-touch-icon" sizes="180x180" href="http://vertx.io/assets/favicons/vertx-favicon-7/apple-touch-icon-180x180.png">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/favicon-32x32.png" sizes="32x32">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/android-chrome-192x192.png" sizes="192x192">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/favicon-96x96.png" sizes="96x96">
  <link rel="icon" type="image/png" href="http://vertx.io/assets/favicons/vertx-favicon-7/favicon-16x16.png" sizes="16x16">
  <link rel="manifest" href="http://vertx.io/assets/favicons/vertx-favicon-7/manifest.json">
  <link rel="mask-icon" href="http://vertx.io/assets/favicons/vertx-favicon-7/safari-pinned-tab.svg" color="#5bbad5">
  <meta name="msapplication-TileColor" content="#7d3194">
  <meta name="msapplication-TileImage" content="http://vertx.io/assets/favicons/vertx-favicon-7/mstile-144x144.png">
  <meta name="theme-color" content="#ffffff">

  <link href="http://fonts.googleapis.com/css?family=Ubuntu:400,500,700,400italic" rel="stylesheet" type="text/css">
  <link rel="alternate" type="application/rss+xml" title="RSS"
     href="http://vertx.io/feed.xml">
  <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
    ga('create', 'UA-30144458-1', 'auto');
    ga('create', 'UA-71153120-1', 'auto', 'tracker');
    ga('send', 'pageview');
    ga('tracker.send', 'pageview');
  </script>
</head>
<body>

<a href="http://www.reactivemanifesto.org/" id="reactive-manifesto-banner">
  <img style="border: 0; position: fixed; right: 0; top:0; z-index: 9000"
    src="http://d379ifj7s9wntv.cloudfront.net/reactivemanifesto/images/ribbons/we-are-reactive-black-right.png">
</a>

<a id="skippy" class="sr-only sr-only-focusable" href="#content"><div class="container"><span class="skiplink-text">Skip to main content</span></div></a>

<header class="navbar navbar-default navbar-static-top" id="top" role="banner">
  <div class="container">
    <div class="navbar-header">
      <button class="navbar-toggle collapsed" type="button" data-toggle="collapse" data-target="#vertx-navbar-collapse">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a href="http://vertx.io/" class="navbar-brand"><img alt="Brand" src="http://vertx.io/assets/logo-sm.png"></a>
    </div>
    <nav class="collapse navbar-collapse" id="vertx-navbar-collapse">
      <ul class="nav navbar-nav navbar-right">
        <li><a href="http://vertx.io/download/">Download</a></li>
        <li><a href="http://vertx.io/docs/">Documentation</a></li>
        <li><a href="https://github.com/vert-x3/wiki/wiki">Wiki</a></li>
        <li><a href="http://vertx.io/community/">Community</a></li>
        <li><a href="http://vertx.io/materials/">Materials</a></li>
        <li><a href="http://vertx.io/blog/">Blog</a></li>        
      </ul>
    </nav>
  </div>
</header>



  <div class="page-header" id="content">
    <div class="container">
      <div class="row">
        <div class="col-sm-12">
          <h1>Vert.x Mail client (SMTP client implementation)</h1>
          
        </div>
      </div>
    </div>
  </div>




<div id="content">
  <div class="container docs-content">
    <div class="row">
      <div class="col-sm-12 col-md-push-9 col-md-3 hidden-xs hidden-sm">
        <div id="sidebar" data-spy="affix">
          <ul class="sectlevel1">
<li><a href="#_creating_a_client">Creating a client</a></li>
<li><a href="#_sending_mails">Sending mails</a></li>
<li><a href="#_mail_client_data_objects">Mail-client data objects</a>
<ul class="sectlevel2">
<li><a href="#_mailmessage_properties">MailMessage properties</a></li>
<li><a href="#_mailattachment_properties">MailAttachment properties</a></li>
<li><a href="#_mailconfig_options">MailConfig options</a></li>
<li><a href="#_mailresult_object">MailResult object</a></li>
</ul>
</li>
</ul>
        </div>
      </div>
      <div class="col-sm-12 col-md-pull-3 col-md-9">
        <div class="toc hidden-md hidden-lg">
          <h2>Table of Contents</h2>
          <ul class="sectlevel1">
<li><a href="#_creating_a_client">Creating a client</a></li>
<li><a href="#_sending_mails">Sending mails</a></li>
<li><a href="#_mail_client_data_objects">Mail-client data objects</a>
<ul class="sectlevel2">
<li><a href="#_mailmessage_properties">MailMessage properties</a></li>
<li><a href="#_mailattachment_properties">MailAttachment properties</a></li>
<li><a href="#_mailconfig_options">MailConfig options</a></li>
<li><a href="#_mailresult_object">MailResult object</a></li>
</ul>
</li>
</ul>
        </div>
        <div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Vert.x client for sending SMTP emails via a local mail server
(e.g.</p>
</div>
<div class="paragraph">
<p>postfix) or by external mail server (e.g. googlemail or aol).</p>
</div>
<div class="paragraph">
<p>The client supports a few additional auth methods like DIGEST-MD5 and has full
support for TLS and SSL and is completely asynchronous. The client supports
connection pooling to keep connections open to be reused.</p>
</div>
<div class="paragraph">
<p>To use this project, add the following dependency to the <em>dependencies</em> section of your build descriptor:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Maven (in your <code>pom.xml</code>):</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-xml" data-lang="xml">&lt;dependency&gt;
  &lt;groupId&gt;io.vertx&lt;/groupId&gt;
  &lt;artifactId&gt;vertx-mail-client&lt;/artifactId&gt;
  &lt;version&gt;3.3.3&lt;/version&gt;
&lt;/dependency&gt;</code></pre>
</div>
</div>
<div class="ulist">
<ul>
<li>
<p>Gradle (in your <code>build.gradle</code> file):</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-groovy" data-lang="groovy">compile 'io.vertx:vertx-mail-client:3.3.3'</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_creating_a_client">Creating a client</h2>
<div class="sectionbody">
<div class="paragraph">
<p>You can send mails by creating a client that opens SMTP connections from the local jvm.</p>
</div>
<div class="paragraph">
<p>The client uses a configuration object, the default config is created as empty
object and will connect to localhost port 25, which should be ok in a standard
Linux environment where you have Postfix or similar mail server running on
the local machine. For all possible properties of the config object, see below.</p>
</div>
<div class="paragraph">
<p>The client can use a connection pool of the SMTP connections to get rid of the overhead of
connecting each time to the server, negotiating TLS and login (this function can be
turned off by setting keepAlive = false). A client can either be shared or non-shared,
if it is shared, the same connection pool will be used for all clients using the same identifier.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-ruby" data-lang="ruby">require 'vertx-mail/mail_client'
config = {
}
mailClient = VertxMail::MailClient.create_shared(vertx, config, "exampleclient")</code></pre>
</div>
</div>
<div class="paragraph">
<p>The first call to MailClient.createShared will actually create the pool with the specified config.
Subsequent calls will return a new client instance that uses the same pool, so the configuration won&#8217;t be used.</p>
</div>
<div class="paragraph">
<p>If you leave out the pool identifier, a default pool will be created. Note that the clients are
shared in the scope of a vertx instance only (so two different vertx will have different pools with the
same identifier).</p>
</div>
<div class="paragraph">
<p>The unshared client can be created the same way leaving out the identifier.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-ruby" data-lang="ruby">require 'vertx-mail/mail_client'
config = {
}
mailClient = VertxMail::MailClient.create_non_shared(vertx, config)</code></pre>
</div>
</div>
<div class="paragraph">
<p>A more elaborate example using a mailserver that requires login via TLS</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-ruby" data-lang="ruby">require 'vertx-mail/mail_client'
config = {
}
config['hostname'] = "mail.example.com"
config['port'] = 587
config['starttls'] = "REQUIRED"
config['username'] = "user"
config['password'] = "password"
mailClient = VertxMail::MailClient.create_non_shared(vertx, config)</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_sending_mails">Sending mails</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Once the client object is created, you can use it to send mails. Since the
sending of the mails works asynchronous in vert.x, the result handler will be
called when the mail operation finishes. You can start many mail send operations
in parallel, the connection pool will limit the number of concurrent operations
so that new operations will wait in queue if no slots are available.</p>
</div>
<div class="paragraph">
<p>A mail message is constructed as JSON. The MailMessage object has
properties from, to, cc, bcc, subject, text, html etc. Depending on which values are set, the
format of the generated MIME message will vary. The recipient address properties
can either be a single address or a list of addresses.</p>
</div>
<div class="paragraph">
<p>The MIME encoder supports us-ascii (7bit) headers/messages and utf8 (usually
quoted-printable) headers/messages</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-ruby" data-lang="ruby">message = {
}
message['from'] = "user@example.com (Example User)"
message['to'] = "recipient@example.org"
message['cc'] = "Another User &lt;another@example.net&gt;"
message['text'] = "this is the plain message text"
message['html'] = "this is html text &lt;a href=\"http://vertx.io\"&gt;vertx.io&lt;/a&gt;"</code></pre>
</div>
</div>
<div class="paragraph">
<p>Attachments can be created by the MailAttachment object using data stored in a Buffer,
this supports base64 attachments.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-ruby" data-lang="ruby">require 'vertx/buffer'
attachment = {
}
attachment['contentType'] = "text/plain"
attachment['data'] = Vertx::Buffer.buffer("attachment file")

message['attachment'] = attachment</code></pre>
</div>
</div>
<div class="paragraph">
<p>When using inline attachments (usually images), it is possible to reference the images within a html message
to display html with the images included in the mail.
Images can be referenced as &lt;img src="cid:contentid@domain"&gt; in the html text, the corresponding image has Disposition:
inline and the Content-ID header as "&lt;contentid@domain&gt;". Please note that RFC 2392 requires Content-ID values to be structured
like a Message-ID with angle brackets and a local and domain part using URL compatible encoding. None of this is not enforced
and most mail clients supports IDs without angle brackets or without domain part, the best practice is to use the strict format.
A valid example for a Content-ID value is "&lt;<a href="mailto:filename%201.jpg@example.org">filename%201.jpg@example.org</a>&gt;"</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-ruby" data-lang="ruby">require 'vertx/buffer'
attachment = {
}
attachment['contentType'] = "image/jpeg"
attachment['data'] = Vertx::Buffer.buffer("image data")
attachment['disposition'] = "inline"
attachment['contentId'] = "&lt;image1@example.com&gt;"

message['inlineAttachment'] = attachment</code></pre>
</div>
</div>
<div class="paragraph">
<p>When sending the mail, you can provide a AsyncResult&lt;MailResult&gt; handler that will be called when
the send operation is finished or it failed.</p>
</div>
<div class="paragraph">
<p>A mail is sent as follows:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="prettyprint highlight"><code class="language-ruby" data-lang="ruby">mailClient.send_mail(message) { |result_err,result|
  if (result_err == nil)
    puts result
  else
    result_err.print_stack_trace()
  end
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_mail_client_data_objects">Mail-client data objects</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_mailmessage_properties">MailMessage properties</h3>
<div class="paragraph">
<p>Email fields are Strings using the common formats for email with or without real
name</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>username@example.com</code></p>
</li>
<li>
<p><code>username@example.com (Firstname Lastname)</code></p>
</li>
<li>
<p><code>Firstname Lastname &lt;<a href="mailto:username@example.com">username@example.com</a>&gt;</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The MailMessage object has the following properties</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>from</code> String representing the From address and the MAIL FROM field</p>
</li>
<li>
<p><code>to</code> String or list of String representing the To addresses and the RCPT TO fields</p>
</li>
<li>
<p><code>cc</code> same as to</p>
</li>
<li>
<p><code>bcc</code> same as to</p>
</li>
<li>
<p><code>bounceAddress</code> String representing the error address (MAIL FROM), if not set from is used</p>
</li>
<li>
<p><code>text</code> String representing the text/plain part of the mail</p>
</li>
<li>
<p><code>html</code> String representing the text/html part of the mail</p>
</li>
<li>
<p><code>attachment</code> MailAttachment or list of MailAttachment attachments of the message</p>
</li>
<li>
<p><code>inlineAttachment</code> MailAttachment or list of MailAttachment of inline attachments of the message (usually images)</p>
</li>
<li>
<p><code>headers</code> MultiMap representing headers to be added in addition to the headers necessary for the MIME Message</p>
</li>
<li>
<p><code>fixedHeaders</code> boolean if true, only the headers provided as headers property will be set in the generated message</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>the last two properties allow manipulating the generate messages with custom headers, e.g. providing
a message-id chosen by the calling program or setting different headers than would be generated by default. Unless you know
what you are doing, this may generate invalid messages.</p>
</div>
</div>
<div class="sect2">
<h3 id="_mailattachment_properties">MailAttachment properties</h3>
<div class="paragraph">
<p>The MailAttachment object has the following properties</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>data</code> Buffer containing the binary data of the attachment</p>
</li>
<li>
<p><code>contentType</code> String of the Content-Type of the attachment (e.g. text/plain or text/plain; charset="UTF8", default is application/octet-stream)</p>
</li>
<li>
<p><code>description</code> String describing the attachment (this is put in the description header of the attachment), optional</p>
</li>
<li>
<p><code>disposition</code> String describing the disposition of the attachment (this is either "inline" or "attachment", default is attachment)</p>
</li>
<li>
<p><code>name</code> String filename of the attachment (this is put into the disposition and in the Content-Type headers of the attachment), optional</p>
</li>
<li>
<p><code>contentId</code> String describing the Content-Id of the attachment (this is used to identify inline images), optional</p>
</li>
<li>
<p><code>headers</code> MultiMap of headers for the attachment in addition to the default ones, optional</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_mailconfig_options">MailConfig options</h3>
<div class="paragraph">
<p>The configuration has the following properties</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>hostname</code> the hostname of the smtp server to connect to (default is localhost)</p>
</li>
<li>
<p><code>port</code> the port of the smtp server to connect to (default is 25)</p>
</li>
<li>
<p><code>startTLS</code> StartTLSOptions either DISABLED, OPTIONAL or REQUIRED, default is OPTIONAL</p>
</li>
<li>
<p><code>login</code> LoginOption either DISABLED, NONE or REQUIRED, default is NONE</p>
</li>
<li>
<p><code>username</code> String of the username to be used for login (required only when LoginOption is REQUIRED)</p>
</li>
<li>
<p><code>password</code> String of the password to be used for login (required only when LoginOption is REQUIRED)</p>
</li>
<li>
<p><code>ssl</code> boolean whether to use ssl on connect to the mail server (default is false), set this to use a port 465 ssl connection (default is false)</p>
</li>
<li>
<p><code>ehloHostname</code> String to used in EHLO and for creating the message-id, if not set, the own hostname will be used, which may not be a good choice if it doesn&#8217;t contain a FQDN or is localhost (optional)</p>
</li>
<li>
<p><code>authMethods</code> String space separated list of allowed auth methods, this can be used to disallow some auth methods or define one required auth method (optional)</p>
</li>
<li>
<p><code>keepAlive</code> boolean if connection pooling is enabled (default is true)</p>
</li>
<li>
<p><code>maxPoolSize</code> int max number of open connections kept in the pool or to be opened at one time (regardless if pooling is enabled or not), default is 10</p>
</li>
<li>
<p><code>trustAll</code> boolean whether to accept all certs from the server (default is false)</p>
</li>
<li>
<p><code>keyStore</code> String the key store filename, this can be used to trust a server cert that is custom generated (optional)</p>
</li>
<li>
<p><code>keyStorePassword</code> String password used to decrypt the key store (optional)</p>
</li>
<li>
<p><code>allowRcptErrors</code> boolean if true, sending continues if a recipient address is not accepted and the mail will be sent if at least one address is accepted (default false)</p>
</li>
<li>
<p><code>disableEsmtp</code> boolean if true, ESMTP-related commands will not be used (set if your smtp server doesn&#8217;t even give a proper error response code for the EHLO command) (default false)</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_mailresult_object">MailResult object</h3>
<div class="paragraph">
<p>The MailResult object has the following members</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>messageID</code> the Message-ID of the generated mail</p>
</li>
<li>
<p><code>recipients</code> the list of recipients the mail was sent to (if allowRcptErrors is true, this may be fewer than the intended recipients)</p>
</li>
</ul>
</div>
</div>
</div>
</div>

        

        
          <div id="footer">
            <div id="footer-text">
              
                Last updated 2016-09-12 08:38:04 CEST
              
              
            </div>
          </div>
        
      </div>
    </div>
  </div>
</div>

<footer>
  <div class="container">
    <div class="row">
      <div class="col-xs-6 col-sm-3 col-md-3 col-lg-2">
        <h2>Vert.x</h2>
        <ul class="list-unstyled">
          <li><a href="http://vertx.io/">Home</a></li>
          <li><a href="http://vertx.io/download/">Download</a></li>
          <li><a href="http://vertx.io/docs/">Documentation</a></li>
          <li><a href="https://github.com/vert-x3/wiki/wiki">Wiki</a></li>
          <li><a href="http://vertx.io/blog/">Blog</a></li>
          <li><a href="http://vertx.io/vertx2/" class="vertx-2-link">Vert.x 2</a></li>
        </ul>
      </div>
      <div class="col-xs-6 col-sm-3 col-md-3 col-lg-2">
        <h2>Community</h2>
        <ul class="list-unstyled">
          <li><a href="http://vertx.io/community/">Help &amp; Contributors</a></li>
          <li><a href="http://vertx.io/materials/">Learning materials</a></li>
          <li><a href="https://groups.google.com/forum/?fromgroups#!forum/vertx">User Group</a></li>
          <li><a href="https://groups.google.com/forum/?fromgroups#!forum/vertx-dev">Developer Group</a></li>
        </ul>
      </div>

      <div class="col-xs-12 col-sm-6 col-lg-offset-2 col-md-6 copyright">
        <p>Vert.x is open source and dual licensed under the <a href="https://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License 1.0</a> and <a href="https://www.apache.org/licenses/LICENSE-2.0.html">Apache License 2.0</a>.</p>
        <p>This website is licensed under the <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA 3.0 License</a>.<br>
        Design by <a href="http://www.michel-kraemer.com">Michel Kr&auml;mer</a>. <a href="http://www.entypo.com">Entypo pictograms</a> by Daniel Bruce.</p>
        <div class="row">
          <div class="col-xs-12 col-lg-offset-1 col-md-5">
            <a href="http://eclipse.org">
            <img class="logo eclipse-logo" src="http://vertx.io/assets/eclipse_logo_grey_small.png" width="204" height="48">
            </a>
          </div>
          <div class="col-xs-12 col-md-offset-2 col-lg-offset-0 col-md-5">
            <a href="http://cloudbees.com">
            <img class="logo cloudbees-logo" src="http://vertx.io/assets/Button-Built-on-CB-1-grey.png" width="180" height="48">
           </a>
          </div>
          <div class="col-xs-12 col-md-offset-2 col-lg-offset-1 col-md-5 jprofiler">
            <a href="http://www.ej-technologies.com/products/jprofiler/overview.html"
            style="text-decoration:none">
            <img class="logo jprofiler-logo" src="http://vertx.io/assets/jprofiler-logo.png" width="48" height="48"><span class="jprofiler-logo">&nbsp; JPROFILER</span>
            </a>
          </div>
        </div>
      </div>
    </div>
  </div>
</footer>

<script src="http://static.jboss.org/theme/js/libs/jquery/jquery-1.9.1.min.js"></script>
<script src="http://vertx.io/javascripts/bootstrap.min.js"></script>
<script src="http://vertx.io/javascripts/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>



<script src="http://vertx.io/javascripts/sidebar.js"></script>


</body>
</html>
